wm iconify .; wm geom .konsola 639x634+600+6; wm geom .output 309x596+273+5 wm geom .konsola 631x808+912+263; wm geom .output 636x192+907+38; kons_font 13; # Morasko ## tclhttpd - stary serwer www tcl-a # + 04.2017; nadaje sie jako przyklad ser www dla zajec SIK ? odp: ??? # + opis: patrz papierowa dokumentacja; # strona www= .htm, Doc_mime, .tml, direct url, domain handler # + kontrola dostepu dosc rozbudowana: # http auth: basic, digest (nie dziala?), Httpd_RequestAuth... # SSL? mozna wymagac/sprawdzac cert tylko globalnie, dla calego serwera ?! # + problem z polskimi znakami w url ?!?!, 22.09.2017 # w content-type trzeba dodac encoding, np "text/html; charset=utf-8" # nie jestem do konca przekonany ze z enc wszystko ok w tym serwerze... # + inne, nowsze MALE serwery www w j. Tcl (patrz AAO ~/tcl/111/www): # wub - brak docs!!! # wibble - ??? # t2ws - ??? # + 31.12.2017, mechanizm .tml niekompat. z vfs/zip !!! # to sie objawia jesli zmodyfikowac .tml w zip-ie... # bezpieczniej odwolywac sie do .tml niz .html w # wiekszosc stron .tml nie jest przystosowana do trybu cache ?!?! # trzymanie tclhttpd w zip + vfs NIE jest dobrym pomyslem !?!? # + 06.2018, problem z encodingiem w direct url... # tak¿e problem z argumentami # + 06.2018, sprawa tls i ". e_tls*"; obecnie uzywamy tls1.7 # ktore uzywa openssl 0.9.8 czyli NIE trzeba robic ". e_tls*" # lappend auto_path /root/tcl/tcllib /root/tcl/tls1.7 # ^ bez "~" ! (bo tclhttpd modyf. zm. env(HOME) ???) # ^ pamietac o ". e_tls1.7" przed uruchomieniem konsoli !!! # !!! auto_path i e_tls musza sie zgadzac !!! (06.2018) source /root/tcl/111/file_vfs_84.tcl # ^ naprawa file size dla vfs/zip, w tclkit 8.4 package re vfs::zip vfs::zip::Mount /root/tcl/222/kitten.zip ./kitten # ^ to jest potrzebne jesli uzywamy kitten.zip ! set argv_old $argv set argv "-port 9000 -https_port 9001" # ^ nr portu http i https source ./kitten/tclhttpd3.5.1/bin/httpd_app.tcl rename bgerror {} set argv $argv_old exec seamonkey http://localhost:9000 & exec seamonkey https://localhost:9001 & #% 29192 #Doc_AddRoot /filmy /root/000/filmy Doc_AddRoot /np [pwd] # !!! do tego miejsca wykonac !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #info load #% {/root/tcl/tls1.7/tcltls.so Tls} {/root/tcl/tclkit/lib/tk8.4/libtk8.4.so Tk} {{} zlib} {{} vfs} {{} rechan} {{} pwb} {{} Mk4tcl} # ... # direct url, czyli procedura zwracajaca tresc do przegladarki # Direct_Url /www #Direct_UrlRemove /www set /www/strona1 "text/html; charset=utf-8" # + to naprawia probelm encoding !! proc /www/strona1 args { _puts "dbg: $args, [encoding convertfrom utf-8 $args]" # + widac, ze znaki w args sa zakodowane binarnie w utf-8 !! return "

args= $args

a ku ku na strona1 !!!

" } #set /www/strona2 "text/html; charset=utf-8" # + bez tego strona jest kodowana windowsowo!! proc /www/strona2 {x y} { return "

x=$x, y=$y

a ku ku na strona2 !!!

" } # ... # domain handler, czyli obsluga calej domeny # Url_PrefixInstall /eee eee_obsluga #Url_PrefixRemove /eee proc eee_obsluga {sock sufix} { upvar #0 Httpd$sock data append html "[clock format [clock seconds]], sufix: $sufix
\n" if {[info exist data(query)]} { append html "query1: $data(query)
\n" set d1 [Url_DecodeQuery $data(query)] append html "query2: $d1
\n" _puts "dbg2: $d1, [encoding convertfrom utf-8 $d1]" # + $d1 ma binarne kodowanie utf-8 } if {[info exist data(line)]} { append html "line: $data(line)
\n" } #append html "array names data: [array names data]
\n" #append html "array get data: [array get data]
\n" append html "fconfigure $sock: [fconfigure $sock]
\n" # fconfigure sock10: -encoding binary -eofchar {{} {}} -translation {auto crlf} # + pierwszy wydruk byl inny?! zmiana po przelaczeniu przegl. na manual!! #Httpd_ReturnData $sock "text/html" $html Httpd_ReturnData $sock "text/html; charset=utf-8" $html # + to naprawia probelm encoding !! } # ... # klient http, test # + konsola odwoluje sie "do samego siebie" ;-); # package re http #% 2.4.5 set h [http::geturl http://localhost:10000/eee/strona123/qqq/www/?x=123&y=321] set r [http::data $h] http::cleanup $h set r #% wto mar 28 21:09:35 CEST 2017, sufix: /strona123/qqq/www/
query1: x=123&y=321
query2: x 123 y 321
line: GET /eee/strona123/qqq/www/?x=123&y=321 HTTP/1.0
set h [http::geturl http://localhost:10000/eee/strona123/qqq/www/ -query x=111&y=222] set r [http::data $h] http::cleanup $h set r #% wto mar 28 21:09:42 CEST 2017, sufix: /strona123/qqq/www/
query1: x=111&y=222
query2: x 111 y 222
line: POST /eee/strona123/qqq/www/ HTTP/1.0
# ... # direct url, obsluga sesji # + sesje: sens maja tylko te komendy: # set sid [Session_Cookie] # Session_Variable $sid zm wart # Session_Variable $sid zm # mozna ich uzyc w direct url lub w .tml !!! # + group to rodzaj tablicy; # w interpie slave utworzyc: tabl qqq1 oraz zm. group= qqq1, # a wtedy Session_Value bedzie odczytywac elem. tej tablicy; # do czego to moze sluzyc??? # + Doc_SetCookie/Cookie dzialaja ok w direct_url !! # Doc_SetCookie -name qqq -value 123 # _puts "qqq=[Doc_Cookie qqq]; sessid=$sid" # + jak sie dostac do Httpd* z direct url-a? odp: # upvar #0 Httpd$::Httpd(currentSocket) conn # _puts "$conn(query), itp" # + cookie sa przypisane do domeny serwera www... # Session_Cookie uzywa domeny "/"... # jak to zmienic? (aby rozne domeny mialy swoje ciasteczka ?!) # Direct_Url /www #Direct_UrlRemove /www #set /www/strona1 text/html set /www/strona1 {text/html; charset="utf-8"} #set /www/strona1 {text/html; charset="iso8859-2"} # + polskie znaki musza byc jawnie konwertowane na utf-8 ?!?! # czyli dane w args trzeba "convertfrom utf-8" proc /www/strona1 args { set sid [Session_Cookie] upvar #0 Httpd$::Httpd(currentSocket) conn return "

args= $args, sid= $sid

[array get conn]

utf-8: [encoding convertto utf-8 {a ku ku na strona1 ³³³ ¶¶¶ ¦¦¦}]

iso8859-2: [encoding convertto iso8859-2 {a ku ku na strona1 ³³³ ¶¶¶ ¦¦¦}]

nic: a ku ku na strona1 ³³³ ¶¶¶ ¦¦¦

" } if 0 { # obsluga sesji set id1 [Session_Create qqq] join [interp slaves] \n #% interpb69b56ac4f277ee3e8b1759f4f6a6217 Session_Variable $id1 zm 111 Session_Variable $id1 zm interp$id1 eval session Session_Destroy $id1 } # ... # pakiety tclhttpd # lsort [info comm {Httpd_*}] #% Httpd_AddHeaders Httpd_CompletionCallback Httpd_CopyPostData Httpd_CurrentSocket Httpd_DumpHeaders Httpd_Error Httpd_GetPostChannel Httpd_GetPostData Httpd_GetPostDataAsync Httpd_Init Httpd_Name Httpd_NoCache Httpd_NotModified Httpd_Pair Httpd_Peername Httpd_Port Httpd_PostDataSize Httpd_Protocol Httpd_ReadPostDataAsync Httpd_Redirect Httpd_RedirectDir Httpd_RedirectSelf Httpd_Refresh Httpd_RegisterShutdown Httpd_RemoveCookies Httpd_RemoveHeaders Httpd_RequestAuth Httpd_RequestComplete Httpd_Resume Httpd_ReturnCacheableData Httpd_ReturnData Httpd_ReturnFile Httpd_SecurePort Httpd_SecureServer Httpd_SecureServerShutdown Httpd_SelfUrl Httpd_Server Httpd_ServerShutdown Httpd_SetCookie Httpd_Shutdown Httpd_SockClose Httpd_Suspend Httpd_Version Httpd_VirtualHost Httpd_VirtualHosts Httpd_Webmaster lsort [info comm {Url_*}] #% Url_AccessInstall Url_AccessInstallPrepend Url_AccessUnInstall Url_Decode Url_DecodeMIMEField Url_DecodeQuery Url_DecodeQueryOnly Url_DecodeQuery_application/x-www-form-urlencoded Url_DecodeQuery_application/x-www-urlencoded Url_DecodeQuery_multipart/form-data Url_DeferredDispatch Url_Dispatch Url_Encode Url_Handle Url_IsLinkToSelf Url_PathCheck Url_PostHook Url_PrefixExists Url_PrefixInstall Url_PrefixMatch Url_PrefixRemove Url_QuerySetup Url_ReadPost Url_Redirect Url_RedirectSelf Url_UnCache Url_Unwind lsort [info comm {Doc_[A-Z]*}] # + Doc_Cookie/SetCookie nie sa opisane w manualu #% Doc_AddRoot Doc_CheckTemplates Doc_Cookie Doc_Dynamic Doc_Error Doc_ErrorInfo Doc_ErrorPage Doc_GetCookie Doc_GetPath Doc_Handle Doc_Include Doc_IndexFile Doc_IsLinkToSelf Doc_NotFound Doc_NotFoundPage Doc_PublicHtml Doc_Redirect Doc_RedirectSelf Doc_RegisterRoot Doc_Root Doc_SetCookie Doc_Subst Doc_SubstInstall Doc_TemplateInterp Doc_TemplateLibrary Doc_TemplateScope Doc_UrlNotFound Doc_Virtual Doc_Webmaster lsort [info comm {Doc_[a-z]*}] # + obsluga typow mime #% Doc_application/x-cgi Doc_application/x-doctool Doc_application/x-server-include Doc_application/x-tcl-auth Doc_application/x-tcl-status Doc_application/x-tcl-subst Doc_application/x-tcl-template Doc_text/html # ... # app webowe pod Tclhttpd ?!?!, 01.2018 # + templates dosc slabe, nie ma oddzielenie log od prez. na 100%... # + dosc wygodne uwierzytelnianie... # + co z encodingiem ?! czy to kwestia naglowka html? albo http?? # co w przypadku danych z url/params ?? # set Httpd(currentSocket) #% sock10 set env(LANG) pl #% pl # + dlaczego tego nie ma ?!?! exec cat /tmp/tclhttpd.default #% p!B0B4I lsort [info vars Httpd*] #% Httpd HttpdAuthorizationFormat HttpdRedirectFormat Httpd_EnvMap Httpd_ErrorFormat Httpd_Errors Httpdsock10 array get page #% querytype application/x-www-urlencoded root ../../ template /root/tcl/111/tclhttpd/app1/np03.tml dynamic 1 filename /root/tcl/111/tclhttpd/app1/np03.tml query {x 123 y ?‚?‚?‚} includeStack /root/tcl/111/tclhttpd/app1 url /np/app1/np03.tml # + nie ma pewnosci ktorego zadania http to dotyczy... set page(url) #% /np/app1/np03.tml set page(query) #% x 123 y ?‚?‚?‚ encoding convertfrom utf-8 $page(query) #% x 123 y ³³³ # + params sa w page(query)! #upvar #0 Httpd$Httpd(currentSocket) q #set q(remote_user) # + to dziala tylko w .tml itp... exit